@namespace DevToys.Blazor.Components.UIElements
@using DevToys.Api;
@inherits ComponentBase

@if (UIElement is not null)
{
    switch (UIElement)
    {
        case IUIStack stack:
            <UIStackPresenter UIStack="@stack" />
            break;

        case IUICard card:
            <UICardPresenter UICard="@card" />
            break;

        case IUIWrap wrap:
            <UIWrapPresenter UIWrap="@wrap" />
            break;

        case IUIGrid grid:
            <UIGridPresenter UIGrid="@grid" />
            break;

        case IUISplitGrid splitGrid:
            <UISplitGridPresenter UISplitGrid="@splitGrid" />
            break;

        case IUIButton button:
            <UIButtonPresenter UIButton="@button" />
            break;

        case IUISettingGroup settingGroup:
            <UISettingGroupPresenter UISettingGroup="@settingGroup" />
            break;

        case IUISetting setting:
            <UISettingPresenter UISetting="@setting" />
            break;

        case IUISwitch @switch:
            <UISwitchPresenter UISwitch="@(@switch)" />
            break;

        case IUISelectDropDownList selectDropDownList:
            <UISelectDropDownListPresenter UISelectDropDownList="@selectDropDownList" />
            break;

        case IUIDropDownButton dropDownButton:
            <UIDropDownButtonPresenter UIDropDownButton="@dropDownButton" />
            break;

        case IUIDiffTextInput diffTextInput:
            <UIDiffTextInputPresenter UIDiffTextInput="@diffTextInput" />
            break;

        case IUIMultiLineTextInput multiLineTextInput:
            <UIMultiLineTextInputPresenter UIMultiLineTextInput="@multiLineTextInput" />
            break;

        case IUIPasswordInput passwordInput:
            <UIPasswordInputPresenter UIPasswordInput="@passwordInput" />
            break;

        case IUINumberInput numberInput:
            <UINumberInputPresenter UINumberInput="@numberInput" />
            break;

        case IUISingleLineTextInput singleLineTextInput:
            <UISingleLineTextInputPresenter UISingleLineTextInput="@singleLineTextInput" />
            break;

        case IUIIcon icon:
            <UIIconPresenter UIIcon="@icon" />
            break;

        case IUIFileSelector fileSelector:
            <UIFileSelectorPresenter UIFileSelector="@fileSelector"/>
            break;

        case IUIInfoBar infoBar:
            <UIInfoBarPresenter UIInfoBar="@infoBar" />
            break;

        case IUILabel label:
            <UILabelPresenter UILabel="@label" />
            break;

        case IUIProgressRing progressRing:
            <UIProgressRingPresenter UIProgressRing="@progressRing" />
            break;

        case IUIProgressBar progressBar:
            <UIProgressBarPresenter UIProgressBar="@progressBar" />
            break;

        case IUIList list:
            <UIListPresenter UIList="@list" />
            break;

        case IUIDataGrid dataGrid:
            <UIDataGridPresenter UIDataGrid="@dataGrid" />
            break;

        case IUIImageViewer imageViewer:
            <UIImageViewerPresenter UIImageViewer="@imageViewer" />
            break;

        case IUIWebView webView:
            <UIWebViewPresenter UIWebView="@webView" />
            break;

        default:
            throw new NotSupportedException($"Gui Tool component of type '{UIElement.GetType().FullName}' isn't supported.");
    }
}